当前位置:  开发笔记 > 编程语言 > 正文

使用{}或new Object()在JavaScript中创建一个空对象?

如何解决《使用{}或newObject()在JavaScript中创建一个空对象?》经验,为你挑选了7个好方法。

在JavaScript中创建空对象有两种不同的方法:

var objectA = {}
var objectB = new Object()

脚本引擎如何处理它们有什么不同吗?有没有理由使用一个而不是另一个?

类似地,也可以使用不同的语法创建一个空数组:

var arrayA = []
var arrayB = new Array()

Már Örlygsso.. 447

对象

使用没有任何好处new Object();- 但{};可以使您的代码更紧凑,更易读.

为了定义空对象,它们在技术上是相同的.该{}语法是短,整齐(不以Java-ISH),并让你瞬间填充对象内联-就像这样:

var myObject = {
        title:  'Frog',
        url:    '/img/picture.jpg',
        width:  300,
        height: 200
      };

数组

对于数组来说,使用new Array();over 也几乎没有任何好处[];- 只有一个小例外:

var emptyArray = new Array(100);

创建一个包含所有插槽的100项长数组undefined- 在某些情况下(例如(new Array(9)).join('Na-Na ') + 'Batman!')可能很好/很有用.

我的推荐

    永远不要使用new Object();- 它比'{}'更笨拙,看起来很傻.

    始终使用[];- 除非您需要快速创建具有预定义长度的"空"数组.

即使您使用Array(100)语法,同一个数组在第101个位置也未定义; 这个数字唯一真正做的就是改变length属性的值. (21认同)

另外,要注意`new Array(1,2,3)`会导致`[1,2,3]`,但是`new Array(1)`会导致`[1]` 因此,"数组"的语义不一致,不必要地混淆. (10认同)

@Pablo我不知道你的论点是什么.像Douglas Crockford一样,我建议使用`[]`.那里没有争论.但是,你认为`new Array(100)`在某种程度上是"无效的",这是不真实的. (9认同)

@Pablo对于`new Array(100)`没有任何意义.阅读文献:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array (6认同)

OP询问有关创建空对象的问题.Guillermo在创建非空对象时指出了差异,这是正确的但不完全是OP所要求的. (2认同)

`new Array(len).fill(0);` (2认同)

我要补充说`Object.create(null)`对于创建空白对象很有用,而`{}`继承自Object原型. (2认同)


小智.. 88

是的,有区别,它们不一样.确实,你会得到相同的结果,但引擎的工作方式不同.其中一个是对象文字,另一个是构造函数,两种不同的方式在javascript中创建对象.

var objectA = {} //This is an object literal

var objectB = new Object() //This is the object constructor

在JS中,一切都是一个对象,但你应该知道新的Object()有以下几点:它可以接收一个参数,并且根据该参数,它将创建一个字符串,一个数字或一个空对象.

例如:new Object(1),将返回一个数字.new Object("hello")将返回一个字符串,这意味着对象构造函数可以委托 - 取决于参数 - 对象创建到其他构造函数,如字符串,数字等...当您管理动态数据时,请务必记住这一点非常重要创建对象..

许多作者建议您不要使用对象构造函数,而是可以使用某种文字符号,在那里您将确保您创建的内容是您希望在代码中具有的内容.

我建议你进一步阅读javascript上的文字符号和构造函数之间的差异,以找到更多细节.



1> Már Örlygsso..:

对象

使用没有任何好处new Object();- 但{};可以使您的代码更紧凑,更易读.

为了定义空对象,它们在技术上是相同的.该{}语法是短,整齐(不以Java-ISH),并让你瞬间填充对象内联-就像这样:

var myObject = {
        title:  'Frog',
        url:    '/img/picture.jpg',
        width:  300,
        height: 200
      };

数组

对于数组来说,使用new Array();over 也几乎没有任何好处[];- 只有一个小例外:

var emptyArray = new Array(100);

创建一个包含所有插槽的100项长数组undefined- 在某些情况下(例如(new Array(9)).join('Na-Na ') + 'Batman!')可能很好/很有用.

我的推荐

    永远不要使用new Object();- 它比'{}'更笨拙,看起来很傻.

    始终使用[];- 除非您需要快速创建具有预定义长度的"空"数组.


即使您使用Array(100)语法,同一个数组在第101个位置也未定义; 这个数字唯一真正做的就是改变length属性的值.
另外,要注意`new Array(1,2,3)`会导致`[1,2,3]`,但是`new Array(1)`会导致`[1]` 因此,"数组"的语义不一致,不必要地混淆.
@Pablo我不知道你的论点是什么.像Douglas Crockford一样,我建议使用`[]`.那里没有争论.但是,你认为`new Array(100)`在某种程度上是"无效的",这是不真实的.
@Pablo对于`new Array(100)`没有任何意义.阅读文献:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array
OP询问有关创建空对象的问题.Guillermo在创建非空对象时指出了差异,这是正确的但不完全是OP所要求的.
`new Array(len).fill(0);`
我要补充说`Object.create(null)`对于创建空白对象很有用,而`{}`继承自Object原型.

2> 小智..:

是的,有区别,它们不一样.确实,你会得到相同的结果,但引擎的工作方式不同.其中一个是对象文字,另一个是构造函数,两种不同的方式在javascript中创建对象.

var objectA = {} //This is an object literal

var objectB = new Object() //This is the object constructor

在JS中,一切都是一个对象,但你应该知道新的Object()有以下几点:它可以接收一个参数,并且根据该参数,它将创建一个字符串,一个数字或一个空对象.

例如:new Object(1),将返回一个数字.new Object("hello")将返回一个字符串,这意味着对象构造函数可以委托 - 取决于参数 - 对象创建到其他构造函数,如字符串,数字等...当您管理动态数据时,请务必记住这一点非常重要创建对象..

许多作者建议您不要使用对象构造函数,而是可以使用某种文字符号,在那里您将确保您创建的内容是您希望在代码中具有的内容.

我建议你进一步阅读javascript上的文字符号和构造函数之间的差异,以找到更多细节.



3> Jason Buntin..:

这些具有相同的最终结果,但我只想补充一点,使用文字语法可以帮助人们习惯JSON的语法(JavaScript文字对象语法的字符串ified子集),所以进入这可能是一个好习惯. .

另一件事:如果忘记使用new运算符,可能会出现细微的错误.因此,使用文字将帮助您避免该问题.

最终,它将取决于情况和偏好.



4> Bobby Jack..:
var objectA = {}

根据我的经验,使用起来要快得多,所以最好采用"标准"并节省一些打字.


此外,文字通常在分析时创建,而"新对象"必须在运行时执行.

5> bobince..:

对象和数组文字语法{}/[]是在JavaScript 1.2中引入的,因此在4.0之前的Netscape Navigator版本中不可用(并且会产生语法错误).

我的手指仍默认说新的Array(),但我是一个非常老的人.值得庆幸的是,Netscape 3不是今天很多人都要考虑的浏览器......


Netscape 3?男人,那是在上一个*世纪*!:-D

6> Thedric Walk..:

我相信{}在这里的一个Javascript视频中推荐这是一个很好的编码约定.new是伪古典继承所必需的.这种var obj = {};方式有助于提醒您,这不是一种经典的面向对象语言,而是一种原型语言.因此,您真正需要的唯一时间new是使用构造函数.例如:

var Mammal = function (name) {
  this.name = name;
};

Mammal.prototype.get_name = function () {
  return this.name;
}

Mammal.prototype.says = function() {
  return this.saying || '';
}

然后就像这样使用:

var aMammal = new Mammal('Me warm-blooded');
var name = aMammal.get_name();

使用{}as的另一个好处new Object是可以使用它来执行JSON样式的对象文字.



7> Karl Morriso..:

数组实例化性能

如果您希望创建一个没有长度的数组:

var arr = []; 比...更快 var arr = new Array();

如果要创建具有一定长度的空数组:

var arr = new Array(x);快于var arr = []; arr[x-1] = undefined;

对于基准测试,请单击以下内容:https://jsfiddle.net/basickarl/ktbbry5b/

然而,我不知道两者的内存占用,我可以想象new Array()占用更多空间.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有